#lang sicp

(define (f-recur n)
  (if (< n 3)
      n
      (+ (* (f-recur (- n 1)) 1)
         (* (f-recur (- n 2)) 2)
         (* (f-recur (- n 3)) 3))))

(define (f-iter n) 

  (define (iter a b c n)
    (if (= n 0)
        c
        (iter b c (+ (* c 1)
                     (* b 2)
                     (* a 3)) (- n 1))))

  (if (< n 3)
      n
      (iter 0 1 2 (- n 2))))